<?php
class Front_Form_Changement extends Jnd_Form
{

    public function __construct( $decorateur = "Formulairejndpro", $options = null )
    {
        parent::__construct($decorateur, $options);
        $this->setElementDecorators(array(
            "$decorateur"
        ), array(), false);
    }

    public function init()
    {
        $this->setName("changement");
        $this->setAction("/accueil/changement-mot-de-passe");
        $this->setMethod("post");
        $this->addAttribs(array(
            "class" => "cssform"
        ));
        
        $champ = new Zend_Form_Element_Hidden("id");
        $champs[] = $champ;
        
        $champ = new Zend_Form_Element_Text("pseudo");
        $champ->setLabel(__("Pseudo"));
        $champ->setRequired(true);
        $champ->setAttribs(array(
            "readonly" => "readonly", 
            "class" => "readonly"
        ));
        $champs[] = $champ;
        
        $champ = new Zend_Form_Element_Password("motDePasse");
        $champ->setLabel(__("Actuel"));
        $champ->setDescription(__("Merci d'indiquer votre mot de passe actuel afin de valider votre identité."));
        $champ->setRequired(true);
        $champs[] = $champ;
        
        $champ = new Zend_Form_Element_Password("nouveau1");
        $champ->setLabel(__("Nouveau"));
        $champ->setDescription(__("Merci d'indiquer votre novueau mot de passe."));
        $champ->setRequired(true);
        $champs[] = $champ;

        $champ = new Zend_Form_Element_Password("nouveau2");
        $champ->setLabel(__("Confirmation"));
        $champ->setDescription(__("Merci d'indiquer votre nouveau mot de passe pour confirmation."));
        $champ->setRequired(true);
        $champs[] = $champ;
        
        $this->addElements($champs);
    }

    /**
     * On contrôle que le mot de passe fournie soit bien celui du compte en
     * question
     *
     * @see Zend_Form::isValid()
     */
    public function isValid( $data )
    {
        $valid = parent::isValid($data);
        if (! $valid) {
            return false;
        }
        
        $salt = Back_Model_Utilisateurs::recuperationSalt($data['pseudo']);
        $motDePasse = $data['motDePasse'];
        $motDePasse = Jnd_Outils::generateHash($motDePasse, $salt);
        $db = Jnd_App::getResource("db");
        $adapter = new Zend_Auth_Adapter_DbTable($db, "utilisateurs", "pseudo", "mot_de_passe");
        $adapter->setIdentity($data['pseudo'])->setCredential($motDePasse);
        
        $result = $adapter->authenticate();
        if ($result->isValid()) {
            if ($data['nouveau1'] == $data['nouveau2']) {
                $nouveau = Jnd_Outils::generateHash($data['nouveau1'], $salt);
                $this->getElement("motDePasse")->setValue($nouveau);
                $this->removeElement("nouveau1");
                $this->removeElement("nouveau2");
            } else {
                $this->getElement("nouveau1")->addError(__("Le nouveau mot de passe et la confirmation sont différents"));
                return false;
            }
            return true;
        } else {
            $valid = false;
            $this->getElement("motDePasse")->addError(__("Le mot de passe n'est pas le bon."));
            return false;
        }
    }
}

